// Store配置文件
export const STORE_CONFIG = {
    // 图像存储配置
    IMAGE_STORE: {
        CACHE_TIMEOUT: 5 * 60 * 1000, // 5分钟
        ENABLE_CACHE: true,
        RETRY_ATTEMPTS: 3,
        MAX_CACHE_SIZE: 100, // 最大缓存项数
        AUTO_CLEANUP_INTERVAL: 10 * 60 * 1000, // 10分钟自动清理
    },

    // UI存储配置
    UI_STORE: {
        PERSISTENCE_KEY: 'ui-store',
        AUTO_SAVE_INTERVAL: 30 * 1000, // 30秒自动保存
        MAX_NOTIFICATIONS: 10,
        NOTIFICATION_CLEANUP_INTERVAL: 60 * 1000, // 1分钟清理过期通知
        MAX_NAVIGATION_HISTORY: 50,
        PANEL_SYNC_DEBOUNCE: 100, // 面板同步防抖时间（毫秒）
    },

    // 任务存储配置
    TASK_STORE: {
        AUTO_RETRY: true,
        MAX_RETRY_ATTEMPTS: 3,
        RETRY_DELAY: 5000, // 5秒
        ENABLE_LOGGING: process.env.NODE_ENV === 'development',
        POLLING_INTERVAL: 2000, // 2秒
        MAX_CONCURRENT_TASKS: 3,
        TASK_TIMEOUT: 30 * 60 * 1000, // 30分钟任务超时
        LOG_RETENTION_TIME: 24 * 60 * 60 * 1000, // 24小时日志保留
        MAX_LOGS_PER_TASK: 1000,
    },

    // 通用配置
    COMMON: {
        DEBOUNCE_DELAY: 300, // 通用防抖延迟
        THROTTLE_DELAY: 1000, // 通用节流延迟
        ERROR_RETRY_DELAY: 2000, // 错误重试延迟
        BATCH_SIZE: 50, // 批处理大小
        MAX_CONCURRENT_REQUESTS: 5, // 最大并发请求数
    }
} as const

// 环境特定配置
export const getStoreConfig = () => {
    const env = process.env.NODE_ENV

    switch (env) {
        case 'development':
            return {
                ...STORE_CONFIG,
                IMAGE_STORE: {
                    ...STORE_CONFIG.IMAGE_STORE,
                    CACHE_TIMEOUT: 2 * 60 * 1000, // 开发环境缓存时间更短
                    RETRY_ATTEMPTS: 1, // 开发环境减少重试次数
                },
                TASK_STORE: {
                    ...STORE_CONFIG.TASK_STORE,
                    ENABLE_LOGGING: true,
                    POLLING_INTERVAL: 1000, // 开发环境更频繁的轮询
                    MAX_RETRY_ATTEMPTS: 1,
                },
                UI_STORE: {
                    ...STORE_CONFIG.UI_STORE,
                    AUTO_SAVE_INTERVAL: 10 * 1000, // 开发环境更频繁的保存
                }
            }

        case 'production':
            return {
                ...STORE_CONFIG,
                TASK_STORE: {
                    ...STORE_CONFIG.TASK_STORE,
                    ENABLE_LOGGING: false, // 生产环境关闭详细日志
                },
                UI_STORE: {
                    ...STORE_CONFIG.UI_STORE,
                    MAX_NOTIFICATIONS: 5, // 生产环境减少通知数量
                }
            }

        case 'test':
            return {
                ...STORE_CONFIG,
                IMAGE_STORE: {
                    ...STORE_CONFIG.IMAGE_STORE,
                    ENABLE_CACHE: false, // 测试环境禁用缓存
                    RETRY_ATTEMPTS: 0,
                },
                TASK_STORE: {
                    ...STORE_CONFIG.TASK_STORE,
                    AUTO_RETRY: false,
                    POLLING_INTERVAL: 100, // 测试环境快速轮询
                },
                UI_STORE: {
                    ...STORE_CONFIG.UI_STORE,
                    AUTO_SAVE_INTERVAL: 100, // 测试环境快速保存
                }
            }

        default:
            return STORE_CONFIG
    }
}

// 存储键名常量
export const STORAGE_KEYS = {
    UI_STORE: 'medical-imaging-ui-store',
    USER_PREFERENCES: 'medical-imaging-preferences',
    CACHE_METADATA: 'medical-imaging-cache-metadata',
    TASK_HISTORY: 'medical-imaging-task-history',
    RECENT_DATASETS: 'medical-imaging-recent-datasets',
    VIEWER_SETTINGS: 'medical-imaging-viewer-settings',
} as const

// 缓存策略配置
export const CACHE_STRATEGIES = {
    // 数据集缓存策略
    DATASETS: {
        ttl: 10 * 60 * 1000, // 10分钟
        maxSize: 50,
        strategy: 'lru' as const, // Least Recently Used
    },

    // 图像数据缓存策略
    IMAGES: {
        ttl: 30 * 60 * 1000, // 30分钟
        maxSize: 20, // 图像数据较大，限制数量
        strategy: 'lru' as const,
    },

    // 元数据缓存策略
    METADATA: {
        ttl: 60 * 60 * 1000, // 1小时
        maxSize: 200,
        strategy: 'lru' as const,
    },

    // 统计数据缓存策略
    STATS: {
        ttl: 5 * 60 * 1000, // 5分钟
        maxSize: 100,
        strategy: 'lru' as const,
    },
} as const

// 通知配置
export const NOTIFICATION_CONFIG = {
    DEFAULT_DURATION: 4000,
    DURATIONS: {
        success: 3000,
        info: 4000,
        warning: 5000,
        error: 6000,
    },
    MAX_VISIBLE: 5,
    POSITION: 'topRight' as const,
    ANIMATION_DURATION: 300,
} as const

// 面板同步配置
export const PANEL_SYNC_CONFIG = {
    // 同步类型权重（用于冲突解决）
    SYNC_WEIGHTS: {
        zoom: 1,
        pan: 2,
        windowLevel: 3,
        slice: 4,
    },

    // 同步阈值
    SYNC_THRESHOLDS: {
        zoom: 0.01, // 缩放变化阈值
        pan: 1, // 平移变化阈值（像素）
        windowLevel: 1, // 窗宽窗位变化阈值
        slice: 1, // 切片变化阈值
    },

    // 同步延迟
    SYNC_DELAYS: {
        immediate: 0,
        debounced: 100,
        throttled: 200,
    },
} as const

// 任务队列配置
export const TASK_QUEUE_CONFIG = {
    // 优先级定义
    PRIORITIES: {
        LOW: 0,
        NORMAL: 1,
        HIGH: 2,
        URGENT: 3,
    },

    // 队列限制
    MAX_QUEUE_SIZE: 100,
    MAX_RUNNING_TASKS: 3,

    // 任务类型权重
    TYPE_WEIGHTS: {
        detection: 1,
        classification: 2,
        segmentation: 3,
        registration: 4,
        reconstruction: 5,
    },

    // 超时配置
    TIMEOUTS: {
        detection: 5 * 60 * 1000, // 5分钟
        classification: 2 * 60 * 1000, // 2分钟
        segmentation: 15 * 60 * 1000, // 15分钟
        registration: 30 * 60 * 1000, // 30分钟
        reconstruction: 60 * 60 * 1000, // 1小时
    },
} as const

// 性能监控配置
export const PERFORMANCE_CONFIG = {
    // 监控指标
    METRICS: {
        API_RESPONSE_TIME: 'api_response_time',
        STORE_UPDATE_TIME: 'store_update_time',
        RENDER_TIME: 'render_time',
        MEMORY_USAGE: 'memory_usage',
    },

    // 性能阈值
    THRESHOLDS: {
        API_SLOW_THRESHOLD: 2000, // 2秒
        STORE_SLOW_THRESHOLD: 100, // 100毫秒
        RENDER_SLOW_THRESHOLD: 16, // 16毫秒（60fps）
        MEMORY_WARNING_THRESHOLD: 100 * 1024 * 1024, // 100MB
    },

    // 采样率
    SAMPLING_RATES: {
        development: 1.0, // 开发环境100%采样
        production: 0.1, // 生产环境10%采样
        test: 0.0, // 测试环境不采样
    },
} as const

export default getStoreConfig